package com.promise.jokerdream.response.pc

import kotlinx.serialization.Serializable
import kotlinx.serialization.SerialName

@Serializable
data class QueryHideInfoResponse(
    override val result: Int,
    override val msg: String = "",
    // 昵称
    val nickname: String = "",
    // 等级
    val level: String = "",
    // 战力，除于10为真实战力
    val combat: String = "",
    // 竞技分段
    @SerialName("arena_rank")
    val arenaRank: String = "",
    // 生命，只需要关注xx+xx+xx即可，忽略其他信息
    @SerialName("hp_add")
    val hpAdd: String = "",
    // 血、力/敏/速等
    val baseattr: List<BaseAttr> = emptyList(),
    // 门派
    val menpai: List<MenpaiAttr> = emptyList(),
    // 腐蚀
    val kuozhanattr: List<KuozhanAttr> = emptyList(),
    // 武器攻击
    val weaponatk: List<WeaponAtkGroup> = emptyList(),
    // 武器被攻击
    @SerialName("weapon_dfs")
    val weaponDfs: List<WeaponDfsGroup> = emptyList(),
    // 技能/空手攻击
    val suatk: List<SuAtkGroup> = emptyList(),
    // 技能/空手被攻击
    val sudef: List<SuDefGroup> = emptyList(),
): BasePCResponse {
    override fun getDescription(): String {
        return msg
    }
    
    /**
     * 获取真实战力（除以10）
     * 如果小数点后为0则不展示小数点
     */
    fun realCombat(): String {
        val combatValue = combat.toDoubleOrNull() ?: 0.0
        val combatDisplay = combatValue / 10.0
        return if (combatDisplay == combatDisplay.toInt().toDouble()) {
            combatDisplay.toInt().toString()
        } else {
            combatDisplay.toString()
        }
    }
    
    /**
     * 解析生命值，只提取xx+xx+xx格式的部分并计算总和
     * 忽略其他信息（如"生命："、"（筋骨加成）"等）
     * 返回格式：表达式=结果（如 "493+14637+0=15130"）
     */
    fun parseHpAdd(): String {
        // 匹配数字+数字+数字的模式
        val regex = Regex("(\\d+\\+\\d+\\+\\d+)")
        val match = regex.find(hpAdd)
        val extractedValue = match?.value ?: hpAdd
        
        // 如果包含 "+"，计算总和并返回 表达式=结果
        return if (extractedValue.contains("+")) {
            val parts = extractedValue.split("+").map { it.trim().toIntOrNull() ?: 0 }
            val sum = parts.sum()
            "$extractedValue=$sum"
        } else {
            extractedValue
        }
    }
}

@Serializable
data class BaseAttr(
    val value: String = "",
    val name: String = ""
) {
    /**
     * 处理 value 中的加法表达式
     * 如果包含 "+"，返回 表达式=结果 格式；否则返回原值
     * 例如："493 + 14637" -> "493 + 14637=15130"
     */
    fun processedValue(): String {
        return if (value.contains("+")) {
            // 处理加法表达式，如 "493 + 14637"
            val parts = value.split("+").map { it.trim().toIntOrNull() ?: 0 }
            val sum = parts.sum()
            "$value=$sum"
        } else {
            value
        }
    }
}

@Serializable
data class MenpaiAttr(
    val value: String = "",
    val name: String = ""
)

@Serializable
data class KuozhanAttr(
    val fs: String = "",
    val dy: String = "",
    val name: String = ""
)

@Serializable
data class WeaponAtkGroup(
    val name: String = "",
    // 命中率
    @SerialName("weapon_hit")
    val weaponHit: List<WeaponAttr> = emptyList(),
    // 暴击率
    @SerialName("weapon_crit")
    val weaponCrit: List<WeaponAttr> = emptyList(),
    // 暴击伤害
    @SerialName("crit_damage")
    val critDamage: List<WeaponAttr> = emptyList(),
    // 伤害值/百分比
    @SerialName("weapon_damage")
    val weaponDamage: List<WeaponAttr> = emptyList(),
    // 穿透
    @SerialName("weapon_penetrate")
    val weaponPenetrate: List<WeaponAttr> = emptyList(),
    // 抗韧性
    @SerialName("dec_weapon_toughness")
    val decWeaponToughness: List<WeaponAttr> = emptyList()
)

@Serializable
data class WeaponDfsGroup(
    val name: String = "",
    // 闪避率
    @SerialName("weapon_miss")
    val weaponMiss: List<WeaponAttr> = emptyList(),
    // 抗暴击率
    @SerialName("dec_weapon_crit")
    val decWeaponCrit: List<WeaponAttr> = emptyList(),
    // 抗暴击伤害
    @SerialName("dec_crit_damage")
    val decCritDamage: List<WeaponAttr> = emptyList(),
    // 抗伤害值/百分比
    @SerialName("dec_weapon_damage")
    val decWeaponDamage: List<WeaponAttr> = emptyList(),
    // 抗穿透
    @SerialName("dec_weapon_penetrate")
    val decWeaponPenetrate: List<WeaponAttr> = emptyList(),
    // 韧性
    @SerialName("weapon_toughness")
    val weaponToughness: List<WeaponAttr> = emptyList()
)

@Serializable
data class SuAtkGroup(
    val name: String = "",
    // 命中率
    val suhit: List<SuAttr> = emptyList(),
    // 暴击率
    val sucritrate: List<SuAttr> = emptyList(),
    // 暴击伤害
    val sucrit: List<SuAttr> = emptyList(),
    // 伤害值/百分比
    val sudamage: List<SuAttr> = emptyList(),
    // 穿透
    val supenettration: List<SuAttr> = emptyList(),
    // 抗韧性
    @SerialName("dec_sutoughness")
    val decSutoughness: List<SuAttr> = emptyList()
)

@Serializable
data class SuDefGroup(
    val name: String = "",
    // 闪避率
    val sumiss: List<SuAttr> = emptyList(),
    // 抗暴击率
    val dsucritrate: List<SuAttr> = emptyList(),
    // 抗暴击伤害
    val dsucrit: List<SuAttr> = emptyList(),
    // 抗伤害值/百分比
    val dsudamage: List<SuAttr> = emptyList(),
    // 抗穿透
    @SerialName("dec_supenettration")
    val decSupenettration: List<SuAttr> = emptyList(),
    // 韧性
    val sutoughness: List<SuAttr> = emptyList()
)

@Serializable
data class WeaponAttr(
    val value: String = "",
    val name: String = ""
)

@Serializable
data class SuAttr(
    val value: String = "",
    val name: String = ""
)
